Diese Folie ist absichtlich leer!


In [1]:
%matplotlib inline
import pandas as pd

Einführung in
Software Analytics

Markus Harrer

@feststelltaste

rheinJUG, 19. November 2019

Über mich

Datenanalysen in der Softwareentwicklung?

Warum?

... ein typischer Projektverlauf

... ein typischer Projektverlauf

... ein typischer Projektverlauf

... ein typischer Projektverlauf

... ein typischer Projektverlauf

"Die Definition von Wahnsinn ist, immer wieder das Gleiche zu tun und andere Ergebnisse zu erwarten."


– Albert Einstein

Das (Tr|D)auerthema

Das (Tr|D)auerthema

Software Analytics

Definition "Software Analytics"

"Software Analytics is analytics on software data for managers and software engineers with the aim of empowering software development individuals and teams to gain and share insight from their data to make better decisions."

Tim Menzies and Thomas Zimmermann

Welche Arten von Softwaredaten?

Alles was aus der Entwicklung und dem Betrieb der Softwaresysteme so anfällt:

  • Statische Daten
  • Laufzeitdaten
  • Chronologische Daten
  • Daten aus der Software-Community

Sehr große Auswahl == sehr große Möglichkeiten?

"Software Analytics" heutzutage

😥

Markus traurig

Unsere derzeitiges "Software Analytics"

Unsere derzeitiges "Software Analytics"

Unsere derzeitiges "Software Analytics"

"Software Analytics" heutzutage

Leider Option 1: Wir verpennen Risiken

Es fehlt Option 2: Situationsspezifische Analysen

"Es kommt drauf an!" aka Kontext

Individuelle Systeme == Individuelle Probleme => Individuelle Analysen => Individuelle Erkenntnisse!



Situationsspezifische Analysen mit Mitteln aus dem

Data Science

= Eine leichtgewichtige Umsetzung von Software Analytics

Data Science

Was is Data Science?

"Statistics on a Mac."

https://twitter.com/cdixon/status/428914681911070720

Meine Definition

Was bedeutet "data"?

"Without data you‘re just another person with an opinion."

W. Edwards Deming

=> Belastbare Erkenntnisse mittels Fakten liefern

Was bedeutet "science"?

"The aim of science is to seek the simplest explanations of complex facts."

Albert Einstein

=> Neue Erkenntnisse verständlich herausarbeiten

Warum Data Science?

Data Science liegt immer noch im Trend!


In [ ]:

"100" == max. Beliebtheit!

Große (Online-)Community

  • Kostenlose Online-Kurse, -Videos und Tutorials (z. B. DataCamp mit über 4,6 Mio. Mitgliedern)
  • Direkte Hilfestellungen (z. B. Stack Overflow oder Blog-Artikel)
  • Lernen mit anderen durch Online-Herausforderungen (z. B. Kaggle)

Wiederverwendbarkeit

  • Analyse von Geschäftsdaten oder Softwaredaten? Fast das Gleiche!
  • Vorgehen für Analysen? Bewährt!
  • Best Practices für Analysen? Frei Haus!
  • Visualisierungen! (spart immens Zeit!)

Wie weit weg sind SoftwareentwicklerInnen</b>
von Data Science?

Was ist ein Data Scientist?

"A data scientist is someone who
  is better at statistics
  than any software engineer
  and better at software engineering
  than any statistician."

From https://twitter.com/cdixon/status/428914681911070720

Nicht so weit weg wie gedacht!

Einige individuellen Analysen aus der Praxis

  • Vorhandenen Modularisierungsschnitt analysieren
  • Performance-Probleme in heterogenen, verteilten Systemen identifizieren
  • Potenzielle Wissensverluste ermitteln
  • Eingesetzte Open-Source-Projekte bewerten
  • ...

Wie Software Analytics mit Data Science beginnen?

Bewährte Ansätze nutzen

Roger Pengs "Stages of Data Analysis"
I. Fragestellung
II. Explorative Datenanalyse
III. Formale Modellierung
IV. Interpretation
V. Kommunikation

=> von der Frage über die Daten zur Erkenntnis!

Gedanken zur Analyse strukturieren



Wie nachvollziehbar umsetzen?

Verwende Literate Statistical Programming

(Intent + Code + Data + Results)
* Logical Step
+ Automation
= Literate Statistical Programming


Vehikel: Computational notebooks

Beispiel "Computational Notebook"


Nutze Data Science Standardwerkzeuge

z. B. einen der populärsten Stacks

  • Jupyter Notebook
  • Python 3
  • pandas
  • matplotlib

Andere Technologien

Jupyter Notebook arbeitet auch mit anderen Technologieplattformen zusammen, z. B. mit

  • jQAssistant Scanner / Neo4j Graphdatenbank
  • JVM-Sprachen via beakerx / Tablesaw
  • bash

=> Also auch was für Javaianer dabei!

Hands-On

Programmierbeispiel

Fallbeispiel

IntelliJ IDEA

  • IDE für Java-Entwickler
  • Fast komplett in Java geschrieben
  • Großes und lang aktives Projekt

I. Fragestellung (1/3)

  • Schreibe die Frage explizit auf
  • Erkläre die Anayseidee verständlich

I. Fragestellung (2/3)

Frage

  • Welche Quellcodedateien sind besonders komplex und änderten sich in letzter Zeit häufig?

I. Fragestellung (3/3)

Umsetzungsideen

  • Werkzeuge: Jupyter, Python, pandas, matplotlib
  • Heuristiken:
    • "komplex": viele Quellcodezeilen
    • "ändert ... häufig": hohe Anzahl Commits
    • "in letzter Zeit": letzte 90 Tage

Meta-Ziel: Grundmechaniken kennenlernen.

II. Explorative Datenanalyse

  • Finde und lade mögliche Softwaredaten
  • Bereinige und filtere die Rohdaten

Wir laden einen Datenexport aus einem Git-Repository.


In [ ]:

Wir sehen uns Basisinfos über den Datensatz an.


In [ ]:

1 DataFrame (~ programmierbares Excel-Arbeitsblatt), 6 Series (= Spalten), 1128819 entries (= Reihen)

Wir wandeln die Zeitstempel von Texte in Objekte um.


In [ ]:

Wir sehen uns nur die jüngsten Änderungen an.


In [ ]:

Wir wollen nur Java-Code verwenden.


In [ ]:

III. Formale Modellierung

  • Schaffe neue Sichten
  • Verschneide weitere Daten

Wir zählen die Anzahl der Änderungen je Datei.


In [ ]:

Wir holen Infos über die Code-Zeilen hinzu...


In [ ]:

...und verschneiden diese mit den vorhandenen Daten.


In [ ]:

VI. Interpretation

  • Erarbeite das Kernergebnis der Analyse heraus
  • Mache die zentrale Botschaft / neuen Erkenntnisse deutlich

Wir zeigen nur die TOP 10 Hotspots im Code an.


In [ ]:

V. Kommunikation

  • Transformiere die Erkenntnisse in eine verständliche Visualisierung
  • Kommuniziere die nächsten Schritte nach der Analyse

Wir erzeugen ein XY-Diagramm aus der TOP 10 Liste.


In [ ]:

Ende der Demo

Weitere Analysebeispiele

  • Analyse der CPU-Auslastung mit Hilfe von vmstat
  • Abhängigkeitsanalyse mit jdeps und D3
  • Analyse der Änderungskohäsion mit Git
  • Analyse der Community-Aktivitäten mittels Daten von Stackoverflow
  • Prüfung der Architektur-Governance-Vorgaben mit jQAssistant

Buchempfehlungen

  • Adam Tornhill: Software Design X-Ray
  • Janelle Arty Starr: Idea Flow
  • Tim Menzies, Laurie Williams, Thomas Zimmermann: Perspectives on Data Science for Software Engineering
  • Jeff Leek: The Elements of Data Analytic Style
  • Wes McKinney: Python For Data Analysis

Meine Empfehlungen zum Einstieg

Meine TOP 5's

https://www.feststelltaste.de/category/top5/

Kurse, Videos, Blogs, Bücher und mehr (im Aufbau).

Mini-Tutorial

https://github.com/feststelltaste/software-analytics-workshop

Zusammenfassung

1. Software Analytics mit Data-Science-Werkzeugen ist möglich
2. Wer mehr will bekommt auch mehr!
3. Es gibt unglaublich viele Quellen für Daten in der Softwareentwicklung

=> von der Frage über die Daten zur Erkenntnis!

Danke! Fragen?

Markus Harrer
innoQ Deutschland GmbH

markus.harrer@innoq.com

@feststelltaste